package com.uinnova.product.eam.service.cmdb.flowable;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.uinnova.product.eam.service.asset.BmConfigSvc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;


/**
 * 调用cmdb新建流程服务
 */
@Service
@Slf4j
public class CMDBFlowableSvc {

    @Autowired
    private BmConfigSvc bmConfigSvc;
    /**
     * cmdb请求IP地址
     */
    private static String HOST;

    /**
     * cmdb的access_key
     */
    private static String ACCESS_KEY;

    /**
     * cmdb的secret_key
     */
    private static String SECRET_KEY;

    /**
     * 流程id
     */
    private static String SERVICE_ID;

    /**
     * 表单id
     */
    private  static String KEY;


    /**
     * 流程接口地址
     */
    private static String API_URL;


    /**
     * cmdb数据获取接口地址
     */
    private static String INTERFACE_URL;

//    @PostConstruct
//    public void init() {
//
//    }

    /**
     * 调用cmdb新建流程服务接口
     * @param params
     * @return
     */
     public CmdbFlowResponse sendCMDBFlowable(CMDBFlowableInfo params) {

         CmdbFlowResponse cmdbFlowResponse = new CmdbFlowResponse();
         String config = bmConfigSvc.getConfigType("CMDB_DATA_SYNC_CONFIG");
         if (StrUtil.isEmpty(config)) {
             log.error("无法获取CMDB的视图配置项");
             cmdbFlowResponse.setSuccess(false);
             cmdbFlowResponse.setError("EAM---无法获取CMDB的视图配置项");
             return cmdbFlowResponse;
         }
         JSONObject jsonConfig = JSON.parseObject(config);
         JSONObject cmdbConfig = jsonConfig.getJSONObject("cmdb_config");
         Assert.isTrue(null != cmdbConfig,  "调用流程失败，未找到cmdb_config相关配置");
         HOST = cmdbConfig.getString("server_ip");
         ACCESS_KEY = cmdbConfig.getString("access_key_flow");
         SECRET_KEY = cmdbConfig.getString("screct_key_flow");
         SERVICE_ID = cmdbConfig.getString("service_id");
         KEY = cmdbConfig.getString("from_key");
         API_URL = cmdbConfig.getString("flowable_url");


         CMDBFlowableParams cmdbFlowableParams = new CMDBFlowableParams();
         cmdbFlowableParams.setName(params.getName());
         cmdbFlowableParams.setAssigneeUsers(params.getAssigneeUsers());
         cmdbFlowableParams.setServiceId(SERVICE_ID);

         FormData formData = new FormData();
         formData.setKey(KEY);
         formData.setValues(params.getFromValue());
         cmdbFlowableParams.setFormData(JSON.toJSONString(formData));
         JSONObject data = JSON.parseObject(JSON.toJSONString(cmdbFlowableParams));


//         params.setFormData(obj);
         EasyOps easyOps = new EasyOps(HOST, ACCESS_KEY, SECRET_KEY);
         String result =  easyOps.sendRequest(API_URL, data, "POST");
         JSONObject jsonObject = JSONObject.parseObject(result);
         // 接口返回状态码
         Integer code = jsonObject.getInteger("code");
         // 接口返回错误信息
         String error = jsonObject.getString("error");

         cmdbFlowResponse.setCode(code);
         cmdbFlowResponse.setError(error);
         cmdbFlowResponse.setSuccess(false);
         if(code==0){
             cmdbFlowResponse.setSuccess(true);
         }
         log.error("调用流程失败，响应结果信息：{}",jsonObject);

         return cmdbFlowResponse;
    }

/**
 * 调用示例：
 */
//        CMDBFlowableInfo cmdbFlowableInfo = new CMDBFlowableInfo();
//        /**
//         * 流程名称
//         */
//        cmdbFlowableInfo.setName("系统新建申请流程-20250425-001");
//
//        /**
//         * 指派处理人
//         */
//        List<String> assigneeUsers = new ArrayList<>();
//        assigneeUsers.add("jiangzy1");
//        cmdbFlowableInfo.setAssigneeUsers(assigneeUsers);
//
//        /**
//         * 新建系统信息
//         */
//        List<FromValue> fromValueList = new ArrayList<>();
//        FromValue fromValue = new FromValue();

//        fromValue.setName("系统名称");
//        fromValue.setShortName("系统简称");

//         fromValue.setSysStatus("在建");
//         fromValue.set_category("父系统");
//        /**
//         * 系统状态
//         */
//        fromValue.setSysStatus(SysStatusEnum.IN_BUILD.toMap());
//        /**
//         * 是否子系统
//         */
//        fromValue.set_category(CategoryEnum.SUB_SYSTEM.toMap());
//
//
//        fromValue.setDescribe("系统描述");
//
//        /**
//         * 创建年份
//         */
//        fromValue.setBuildYear("2025");
//
//
//        fromValue.setEamId("系统对应的cicode");
//        fromValueList.add(fromValue);
//
//        cmdbFlowableInfo.setFromValue(fromValueList);
//
//
//        boolean isSuccess =  cmdbFlowableSvc.sendCMDBFlowable(cmdbFlowableInfo);



}
